最後の仕上げ SplashScreenを作る & 各レベルをつなげる
SplashScreen Scene
いわゆるタイトル画面
CanvasLayerをルートとする
ボタンを配置
押すと、それぞれのLevelをロードする。
get_tree().change_scene()
https://gyazo.com/3557f00049d0d1f9a0cc36877fdc6445
シーンからマージ
シーンの継承より、繋がりの薄いシーンツリー再利用
Nodeツリー構造 + プロパティだけ
スクリプトやシグナル、グループは全て外れた状態
編集できる
マージ元の変更が反映されない
VictoryやGameOverと似た画面なので使い回したいが、個別要素を編集し直したりロジックを変えたい
といったときに便利
1. New Scene > CanvasLayer
2. シーンツリーのルートを右クリ > シーンからマージ
Script
https://gyazo.com/78bfe26d1ee5365838ef94082f691308
code: SplashScreen.py
extends CanvasLayer
func _on_Tutorial_pressed():
get_tree().change_scene("res://Levels/Tutorial.tscn")
func _on_Level1_pressed():
get_tree().change_scene("res://Levels/Level1.tscn")
func _on_Quit_pressed():
get_tree().quit()
Mainシーンの変更
Mainシーンは、ゲームを起動したときに最初に読み込まれるもの
cmd + B でも、Mainから起動される。
多くのプログラミング言語でも、Main関数は1つであり、エントリーポイントであることが多い。
1. Project Setting > General
2. Application > Run > Main scene
Tutorial GUI のアプリケーション
そのままだと地味なので、AnimationPlayerを使って
メッセージがアップデートされるたびにテキストボックスが収縮するような仕組みを入れてみる。
(NinePatchRect.sizeのproperty_track)
まとめ
このレッスンでやったこと
特にクールなこと
キャラクターの動き、マウスへ自動で向く
監視カメラ、警備員で同じスクリプトを継承し、効率よく実装
AutoTile
Collision
Occlusion : 光を遮断
Navigation2D
NavigationPolygon
TileMapを重ねる
ステージ作成を自動化する数々のクールなアイデア
Light2D
LightMap
Light2Dとの位置関係
NodeTreeの取り扱い
Empty Node
いろいろなオブジェクトをまとめるのに便利
get_children()でまとめて取得
has_node()
オブジェクト指向的なアプローチ
あるプレイヤーがあるアイテムを持っている、ということをNodeTreeのオブジェクト指向で実現する
CanvasLayer
SplashScree や、GameOverなどUIアイテムだけで作られるシーンの作成
Level においても、Playerへの情報表示や入力インターフェースの提供をする
Control
CanvasLayerでは、UI要素として振る舞う
Node2Dの子要素にして、ゲームのピクセル空間での情報表示にも役立つ
Label
Night Vision の制限時間
Mapのラベル
ComputerとLockedDoorのペア表示
さらなるゲームの改善アイデア
さらなるタイプの敵
犬
スコアシステム
出口へつくまでにいくつの書類を盗めるか
マルチレベル
1つのレベル内にいろいろなマップを作って、状態を引き継ぎつつ移動する
室内
庭
屋根裏
1階、2階, ...
次回
3Dシーンに移る
Z軸が加わって若干複雑だが、やり方は同じ